<?php
/**
 * Flea Site
 *
 * @copyright  Copyright (c) 2008 Movoin Studio (http://movoin.com)
 * @license    Apache License 2.0
 * @version    $Id: Base.php 138 2009-05-25 06:42:38Z movoin $
 */

/**
 * Controller_Base 是后台控制器的基类，提供一些公共方法
 *
 * @package Site
 * @subpackage Admin
 *
 */
class Controller_Base extends FLEA_Controller_Action {

    var $_siteVar;

    var $modelOptions;

    var $_ui;

    /**
     * 构造函数
     *
     * @return Controller_Base
     */
    function Controller_Base() {
        // 载入UI控件
        $this->_ui =& FLEA::initWebControls();

        // 获取SITEID
        $siteId = $_GET['site']?(int)$_GET['site']:0;

        /**
         * 模式配置文件
         */
        $deploy = defined('DEPLOY_MODE') && DEPLOY_MODE;
        if ( $deploy ) {
            $lifetime = 86400; //一天
        } else {
            $lifetime = 0;
        }

        /**
         * 配置模型实例
         */
        $this->modelOptions =& FLEA::getSingleton( 'Model_Options' );
        $this->modelOptions->setSite($siteId); // 设置当前站点 默认站点编号 0

        /*
         * 缓存配置信息
         */
        $cacheid = 'options.admin';
        $options = FLEA::getCache($cacheid, $lifetime, true, true);
        if (!is_array($options)) {
            $options['options'] = $this->modelOptions->getOption();
            $options['menus'] = include ROOT_DIR . '/site/config/site.php';
            FLEA::writeCache( $cacheid, $options, true );
        }
        $this->_siteVar = $options;
    }

    /**
     * 根据数据表的元数据返回一个数组，这个数组包含所有需要初始化的数据，可以用于界面显示
     *
     * @param array $meta
     * @return array
     */
    function _prepareData(& $meta) {
        $data = array ();
        foreach ( $meta as $m ) {
            if (isset ( $_POST [$m ['name']] )) {
                $data [$m ['name']] = $_POST [$m ['name']];
            } else {
                if (isset ( $m ['defaultValue'] )) {
                    $data [$m ['name']] = $m ['defaultValue'];
                } else {
                    $data [$m ['name']] = null;
                }
            }
        }
        return $data;
    }

    /**
     * 返回用 _setBack() 设置的 URL
     */
    function _goBack() {
        $url = $this->_getBack ();
        unset ( $_SESSION ['BACKURL'] );
        redirect ( $url );
    }

    /**
     * 设置返回点 URL，稍后可以用 _goBack() 返回
     */
    function _setBack() {
        $_SESSION ['BACKURL'] = $_SERVER ['QUERY_STRING'];
    }

    /**
     * 获取返回点 URL
     *
     * @return string
     */
    function _getBack() {
        if (isset ( $_SESSION ['BACKURL'] )) {
            $url = $this->rawurl ( $_SESSION ['BACKURL'] );
        } else {
            $url = $this->_url ();
        }
        return $url;
    }

    /**
     * 直接提供查询字符串，生成 URL 地址
     *
     * @param string $queryString
     * @return string
     */
    function rawurl($queryString) {
        if (substr ( $queryString, 0, 1 ) == '?') {
            $queryString = substr ( $queryString, 1 );
        }
        return $_SERVER ['SCRIPT_NAME'] . '?' . $queryString;
    }

    /**
     * 调用视图
     *
     * @param string $tplname
     * @param mixed $viewdata
     */
    function _executeView($tplname, $viewdata = null)
    {
        $tplname = FLEA::getAppInf('templatesDir') . DS . $tplname;
        parent::_executeView($tplname, $viewdata);
    }

    /**
     * 后台URL构造函数
     *
     * @param string $controllerName
     * @param string $actionName
     * @param array $params
     * @param string $anchor
     * @param string $options
     * @return string
     */
    function _url($controllerName = null, $actionName = null, $params = null, $anchor = null, $options = null) {
        $params[] = array('manage' => 'admin');
        $params[] = array('site' => $this->modelOptions->getSite());
        return url($controllerName, $actionName, $params, $anchor, $options);
    }

    /**
     * 获取指定Key的栏目信息
     *
     * @param string $columnKey
     */
    function getColumnInf($columnKey=null, $st='column') {
        foreach($this->_siteVar['menus'][$st] as $column) {
            if($column['key'] == $columnKey || !$columnKey) {
                return $column;
            }
        }
    }

    /**
     * 获取指定键名的配置信息
     *
     * @param string $opName
     */
    function getOption($opName) {
        return $this->_siteVar['options'][$opName]?h($this->_siteVar['options'][$opName]):'';
    }

    /**
     * 获取指定Web控件
     *
     * @param string $type
     * @param string $name
     * @param array $args
     */
    function getControl($type, $name, $args=null) {
        return $this->_ui->control($type, $name, $args);
    }

}
